package cn.tedu.blog.server.mapper;

import cn.tedu.blog.server.pojo.dto.RoleAddNewDTO;
import cn.tedu.blog.server.pojo.entity.Role;
import cn.tedu.blog.server.pojo.vo.RoleListVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/17 9:12
 * @Description: 角色管理-数据库进行数据持久化操作映射
 */
@Repository
public interface RoleMapper {


    /**
     * 创建角色
     * @param role
     * @return
     */
    int creatRole(Role role);



    /**
     * 赋予用户角色
     */
    int createRoleByUserId(
            @Param("userId")Long userId,
            @Param("array") Long[] optionsSelect,
            @Param("gmtCreate")LocalDateTime gmtCreate,
            @Param("gmtModified")LocalDateTime gmtModified
    );


    /**
     * 赋予角色权限
     */
    int createMenuByRoleId(
            @Param("roleId")Long roleId,
            @Param("array") Long[] menuTreeArray,
            @Param("gmtCreate")LocalDateTime gmtCreate,
            @Param("gmtModified")LocalDateTime gmtModified
    );


    /**
     * 删除角色
     */
    int deleteById(Long id);



    /**
     * 批量删除角色
     */
    int deleteByIds(List<Long> ids);



    /**
     * 清空用户绑定的角色
     */
    int clearUserRoleById(@Param("userId") Long UserId,@Param("roleId") Long roleId);



    /**
     * 清空角色的权限
     */
    int clearMenuByRoleId(Long roleId);




    /**
     * 修改角色
     */
    int updateById(RoleAddNewDTO roleAddNewDTO);



    /**
     * 判断新增角色是否已存在
     */
    int isUpdateName(@Param("id")Long id,@Param("name")String name);



    /**
     * 根据角色名称判断修改后的角色名称是否重复
     */
    int isRoleById(Long id);


    /**
     * 根据角色名称查询角色id
     */
    Long getRoleIdByRoleName(String RoleName);




    /**
     * 根据条件查询结果集的数量
     * @return
     */
    int getCountAll(RoleListVO roleListVO);



    /**
     * 根据用户ID查询完成数据回填
     * @param id
     * @return 用户信息
     */
    RoleListVO getBackFillById(Long id);



    /**
     * 根据用户id回显该用户拥有的角色id
     * @param userId
     * @return 用户信息
     */
    Long[] getBackFillByUserId(Long userId);



    /**
     * 查询全部角色
     */
    List<RoleListVO> listRoleEcho();



    /**
     * 条件分页查询
     * @param roleListVO
     * @return
     */
    List<RoleListVO> listByKeyword(RoleListVO roleListVO);



    /**
     * 根据角色id查询对应权限
     * @param id
     * @return
     */
    List<Long> roleMenuById(Long id);
}
